// pages/auth/auth.js
const app = getApp()

Page({
  data: {
    userInfo: null,
    defaultAvatarUrl: 'https://mmbiz.qpic.cn/mmbiz/icTdbqWNOwNRna42FI242Lcia07jQodd2FJGIYQfG0LAJGFxM4FbnQP6yfMxBgJ0F3YRqJCJ1aPAK2dQagdusBZg/0',
    isAuthorized: false // 添加授权完成标志
  },

  onLoad() {
    // 初始化用户信息
    this.setData({
      userInfo: {
        avatarUrl: '',
        nickName: ''
      }
    })
  },

  onShow() {
    // 检查全局登录状态，避免重复授权
    const app = getApp()
    if (app.globalData.isLoggedIn && app.globalData.userInfo) {
      console.log('用户已登录，直接返回')
      wx.navigateBack()
      return
    }
    
    // 如果已经授权完成，不再检查授权状态
    if (this.data.isAuthorized) {
      console.log('用户已授权完成，跳过授权检查')
      return
    }
    
    // 检查是否已经授权
    this.checkAuthStatus()
  },

  // 检查授权状态
  checkAuthStatus() {
    wx.getSetting({
      success: (res) => {
        console.log('授权状态:', res.authSetting)
        if (res.authSetting['scope.userInfo']) {
          // 已经授权，获取用户信息
          this.getUserInfo()
        }
      }
    })
  },

  // 获取用户信息
  getUserInfo() {
    wx.getUserInfo({
      success: (res) => {
        console.log('获取用户信息成功:', res)
        this.setData({
          userInfo: res.userInfo
        })
      },
      fail: (err) => {
        console.log('获取用户信息失败:', err)
      }
    })
  },

  // 使用新版头像昵称组件
  onChooseAvatar(e) {
    console.log('选择头像:', e.detail)
    const { avatarUrl } = e.detail
    this.setData({
      'userInfo.avatarUrl': avatarUrl
    })
  },

  // 昵称输入
  onNicknameInput(e) {
    console.log('昵称输入:', e.detail.value)
    this.setData({
      'userInfo.nickName': e.detail.value
    })
  },

  // 昵称输入框失焦事件（处理内容安全检测）
  onNicknameBlur(e) {
    console.log('昵称输入框失焦:', e.detail.value)
    // 根据官方文档，微信会异步进行安全检测
    // 如果未通过检测，微信会清空用户输入的内容
    // 这里我们重新获取输入框的值
    this.setData({
      'userInfo.nickName': e.detail.value
    })
  },

  // 确认授权
  confirmAuth() {
    const { userInfo } = this.data
    console.log('确认授权，用户信息:', userInfo)
    
    if (!userInfo || !userInfo.avatarUrl || !userInfo.nickName) {
      wx.showToast({
        title: '请完善头像和昵称',
        icon: 'none'
      })
      return
    }

    // 验证昵称不能为空或默认值
    if (!userInfo.nickName.trim() || userInfo.nickName === '微信用户') {
      wx.showToast({
        title: '请输入有效的昵称',
        icon: 'none'
      })
      return
    }

    // 创建用户
    this.createUser(userInfo)
  },

  // 创建用户
  createUser(userInfo) {
    console.log('创建用户:', userInfo)
    wx.showLoading({ title: '登录中...' })

    // 先获取微信登录凭证
    wx.login({
      success: (loginRes) => {
        if (loginRes.code) {
          // 获取用户授权信息（包含unionid）
          this.getUserProfile(loginRes.code, userInfo)
        } else {
          wx.hideLoading()
          wx.showToast({
            title: '获取登录凭证失败',
            icon: 'none'
          })
        }
      },
      fail: (err) => {
        wx.hideLoading()
        console.error('微信登录失败:', err)
        wx.showToast({
          title: '登录失败，请重试',
          icon: 'none'
        })
      }
    })
  },

  // 获取用户授权信息
  getUserProfile(code, userInfo) {
    wx.getUserProfile({
      desc: '用于完善用户资料',
      success: (profileRes) => {
        console.log('用户授权信息:', profileRes)
        this.sendUserData(code, userInfo, profileRes.userInfo)
      },
      fail: (err) => {
        console.log('获取用户授权信息失败，使用基础信息:', err)
        // 如果获取失败，仍然发送基础信息
        this.sendUserData(code, userInfo, null)
      }
    })
  },

  // 发送用户数据到后端
  sendUserData(code, userInfo, profileInfo) {
    console.log('原始userInfo对象:', userInfo)
    console.log('原始profileInfo对象:', profileInfo)
    console.log('原始code值:', code)
    
    // 先上传头像到服务器
    this.uploadAvatarAndCreateUser(code, userInfo, profileInfo)
  },

  // 上传头像并创建用户
  uploadAvatarAndCreateUser(code, userInfo, profileInfo) {
    const avatarPath = userInfo.avatarUrl
    
    // 检查是否是微信临时头像URL
    if (avatarPath && (avatarPath.includes('wxfile://') || avatarPath.includes('http://tmp'))) {
      // 是临时文件，需要上传到服务器
      console.log('检测到临时头像，开始上传到服务器...')
      
      wx.uploadFile({
        url: `${app.globalData.baseUrl}/api/user/upload-avatar`,
        filePath: avatarPath,
        name: 'avatar',
        formData: {
          user_id: 0 // 临时用户ID，创建用户后会被更新
        },
        success: (uploadRes) => {
          try {
            const uploadData = JSON.parse(uploadRes.data)
            if (uploadData.success && uploadData.data && uploadData.data.avatar_url) {
              console.log('头像上传成功:', uploadData.data.avatar_url)
              // 使用服务器返回的头像URL创建用户
              this.createUserWithAvatar(code, userInfo, profileInfo, uploadData.data.avatar_url)
            } else {
              console.error('头像上传失败，使用默认头像')
              this.createUserWithAvatar(code, userInfo, profileInfo, null)
            }
          } catch (parseError) {
            console.error('解析头像上传响应失败:', parseError)
            this.createUserWithAvatar(code, userInfo, profileInfo, null)
          }
        },
        fail: (uploadErr) => {
          console.error('头像上传请求失败:', uploadErr)
          // 上传失败，使用默认头像创建用户
          this.createUserWithAvatar(code, userInfo, profileInfo, null)
        }
      })
    } else {
      // 不是临时文件，直接创建用户
      this.createUserWithAvatar(code, userInfo, profileInfo, avatarPath)
    }
  },

  // 使用头像URL创建用户
  createUserWithAvatar(code, userInfo, profileInfo, avatarUrl) {
    const requestData = {
      wechat_openid: code,
      wechat_unionid: profileInfo?.unionId || '',
      nickname: (userInfo.nickName || userInfo.nickname || '用户').trim(),
      avatar: avatarUrl || '' // 使用服务器返回的头像URL或空字符串
    }
    
    console.log('发送到后端的数据:', requestData)
    
    wx.request({
      url: `${app.globalData.baseUrl}/api/user/create-or-update`,
      method: 'POST',
      data: requestData,
      success: (res) => {
        console.log('登录API响应:', res.data)
        if (res.data.success) {
          const user = res.data.data.user
          console.log('用户数据:', user)
          
          // 保存用户信息到全局
          app.setLoginStatus(user)
          
          // 设置授权完成标志
          this.setData({
            isAuthorized: true
          })
          
          wx.showToast({
            title: '登录成功',
            icon: 'success'
          })

          // 检查是否有待处理的房间代码（从分享链接进入）
          const pendingRoomCode = wx.getStorageSync('pending_room_code')
          if (pendingRoomCode) {
            console.log('登录成功，发现待处理的房间代码，跳转到房间页面:', pendingRoomCode)
            // 清除待处理的房间代码
            wx.removeStorageSync('pending_room_code')
            
            // 直接跳转到房间页面
            setTimeout(() => {
              wx.redirectTo({
                url: `/pages/room/room?roomCode=${pendingRoomCode}`,
                success: () => {
                  console.log('已跳转到房间页面')
                },
                fail: (err) => {
                  console.error('跳转到房间页面失败:', err)
                  // 跳转失败，返回上一页
                  wx.navigateBack()
                }
              })
            }, 1000)
            return
          }

          // 没有待处理的房间代码，返回上一页
          setTimeout(() => {
            wx.navigateBack({
              success: () => {
                console.log('返回上一页成功')
                // 延迟触发上一页的页面显示事件，确保状态已更新
                setTimeout(() => {
                  const pages = getCurrentPages()
                  if (pages.length > 0) {
                    const currentPage = pages[pages.length - 1]
                    console.log('触发上一页onShow方法')
                    if (currentPage && currentPage.onShow) {
                      currentPage.onShow()
                    }
                  }
                }, 100)
              }
            })
          }, 1000)
        } else {
          wx.showToast({
            title: res.data.message || '登录失败',
            icon: 'none'
          })
        }
      },
      fail: (err) => {
        console.error('登录请求失败:', err)
        wx.showToast({
          title: '网络错误，请重试',
          icon: 'none'
        })
      },
      complete: () => {
        wx.hideLoading()
      }
    })
  },

})
